package com.ruoyi.system.service.estate.impl;

import java.util.Date;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.system.mapper.estate.NewsMapper;
import com.ruoyi.system.domain.estate.News;
import com.ruoyi.system.service.estate.INewsService;

/**
 * 资讯管理Service业务层处理
 */
@Service
public class NewsServiceImpl implements INewsService {
    @Autowired
    private NewsMapper newsMapper;

    /**
     * 查询资讯列表
     * 
     * @param news 资讯信息
     * @return 资讯集合
     */
    @Override
    public List<News> selectNewsList(News news) {
        return newsMapper.selectNewsList(news);
    }

    /**
     * 查询资讯详细信息
     * 
     * @param newsId 资讯ID
     * @return 资讯信息
     */
    @Override
    public News selectNewsById(Long newsId) {
        return newsMapper.selectNewsById(newsId);
    }

    /**
     * 新增资讯
     * 
     * @param news 资讯信息
     * @return 结果
     */
    @Override
    public int insertNews(News news) {
        // 设置默认值
        if (news.getViewCount() == null) {
            news.setViewCount(0);
        }
        if (news.getSortOrder() == null) {
            news.setSortOrder(0);
        }
        if (news.getNewsStatus() == null) {
            news.setNewsStatus("0"); // 默认草稿状态
        }
        if (news.getIsTop() == null) {
            news.setIsTop("0"); // 默认不置顶
        }
        news.setCreateTime(new Date());
        news.setCreateBy(SecurityUtils.getUsername());
        news.setDelFlag("0");
        news.setStatus("0");
        return newsMapper.insertNews(news);
    }

    /**
     * 修改资讯
     * 
     * @param news 资讯信息
     * @return 结果
     */
    @Override
    public int updateNews(News news) {
        news.setUpdateTime(new Date());
        news.setUpdateBy(SecurityUtils.getUsername());
        return newsMapper.updateNews(news);
    }

    /**
     * 批量删除资讯
     * 
     * @param newsIds 需要删除的资讯ID
     * @return 结果
     */
    @Override
    public int deleteNewsByIds(Long[] newsIds) {
        return newsMapper.deleteNewsByIds(newsIds);
    }

    /**
     * 删除资讯信息
     * 
     * @param newsId 资讯ID
     * @return 结果
     */
    @Override
    public int deleteNewsById(Long newsId) {
        return newsMapper.deleteNewsById(newsId);
    }
    
    /**
     * 更新资讯浏览次数
     * 
     * @param newsId 资讯ID
     * @return 结果
     */
    @Override
    public int updateViewCount(Long newsId) {
        return newsMapper.updateViewCount(newsId);
    }
    
    /**
     * 发布资讯
     * 
     * @param newsId 资讯ID
     * @return 结果
     */
    @Override
    public int publishNews(Long newsId) {
        News news = new News();
        news.setNewsId(newsId);
        news.setNewsStatus("1"); // 已发布
        news.setPublishTime(new Date()); // 设置发布时间为当前时间
        news.setUpdateTime(new Date());
        news.setUpdateBy(SecurityUtils.getUsername());
        return newsMapper.updateNews(news);
    }
    
    /**
     * 下架资讯
     * 
     * @param newsId 资讯ID
     * @return 结果
     */
    @Override
    public int unpublishNews(Long newsId) {
        News news = new News();
        news.setNewsId(newsId);
        news.setNewsStatus("2"); // 已下架
        news.setUpdateTime(new Date());
        news.setUpdateBy(SecurityUtils.getUsername());
        return newsMapper.updateNews(news);
    }
    
    /**
     * 置顶资讯
     * 
     * @param newsId 资讯ID
     * @return 结果
     */
    @Override
    public int setTopNews(Long newsId) {
        News news = new News();
        news.setNewsId(newsId);
        news.setIsTop("1"); // 置顶
        news.setUpdateTime(new Date());
        news.setUpdateBy(SecurityUtils.getUsername());
        return newsMapper.updateNews(news);
    }
    
    /**
     * 取消置顶资讯
     * 
     * @param newsId 资讯ID
     * @return 结果
     */
    @Override
    public int cancelTopNews(Long newsId) {
        News news = new News();
        news.setNewsId(newsId);
        news.setIsTop("0"); // 取消置顶
        news.setUpdateTime(new Date());
        news.setUpdateBy(SecurityUtils.getUsername());
        return newsMapper.updateNews(news);
    }
}